package com.codefish.framework.spring.beans.factory.config;

import com.codefish.framework.spring.beans.exception.BeansException;

/**
 * 提供了可以修改bean实例的BeanFactory钩子
 *
 * @author <a href='https://gitee.com/hzf2281'>codefish</a>
 * @version 1.0.0
 * @since 2022/10/03 下午 02:56
 */
public interface IBeanPostProcessor {
    /**
     * 在一个bean实例进行初始化前(例如执行InitializingBean的afterPropertiesSet方法或者bean的init-method方法)被调用
     *
     * @param bean     某个bean实例
     * @param beanName bean实例对应的beanName
     * @return 操作后的bean实例
     * @throws BeansException 出现异常时抛出
     */
    default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }

    /**
     * 在一个bean实例进行初始化后(例如执行InitializingBean的afterPropertiesSet方法或者bean的init-method方法)被调用
     *
     * @param bean     某个bean实例
     * @param beanName bean实例对应的beanName
     * @return 操作后的bean实例
     * @throws BeansException 出现异常时抛出
     */
    default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }

}
